简单介绍
模板方法模式(Template):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。
模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
策略模式(Strategy):定义了一系列的算法,并将每一个算法封装起来,而且使他们可以相互替换,让算法独立于使用它的客户而独立变化。
定义公共方法,创建一个工厂,通过策略模式,让它的子类可以根据策略相互替换。
举个🌰
一群小动物要出门秋游,每个动物一开始都要准备出门远行的物品,不过不同动物穿的衣服和出门方式不同,例如酷酷的雪纳瑞,穿的是时髦的当季衣服,出门方式是小轿车;机智的拉布拉多,穿的是朴素的T恤,骑着拉风的小电驴;还有富有的🐶,穿的是钻石风衣,乘着🚁出门。
从上所述,可以抽象出一个总的动作:出门秋游,然后分成三个步骤:
一致的:
- 准备出门远行的物品
不一致的:
- 穿衣服
- 交通工具
代码设计
接口
1 | /** |
抽象模板
1 | public abstract class AbstractAutumnOuting implements IAutumnOuting{ |
模板1 - 酷酷的雪纳瑞
1 |
|
模板2 - 机智的拉布拉多
1 |
|
模板3 - 🐶
1 |
|
工厂-策略模式
1 | /** |
执行效果
从执行效果可以看出,通过策略模式(类似switch操作),工厂判断出真正执行的对象,然后模板方法中,step1是公有的,step2和step3是子类中差异化实现的操作。
从控制台的打印结果可以看出,三个小动物的step操作都顺利执行了,而且代码的逻辑性看起来更强了。